package com.book.backend.service.impl;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.book.backend.common.BasePage;
import com.book.backend.common.R;
import com.book.backend.pojo.BookType;
import com.book.backend.service.BookTypeService;
import com.book.backend.mapper.BookTypeMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
* @description 针对表【t_book_type】的数据库操作Service实现
* @createDate 2023-02-04 18:51:24
*/
@Service
public class BookTypeServiceImpl extends ServiceImpl<BookTypeMapper, BookType>
    implements BookTypeService{

    @Override
    public R<List<BookType>> getBookTypeList() {
        // 从数据库或其它源获取书籍类型列表
        List<BookType> list = this.list();
        R<List<BookType>> result = new R<>();
        // 判断书籍类型列表是否为空，为空则返回错误信息
        if (list.isEmpty()) {
            return R.error("获取书籍分类失败");
        }
        // 设置获取成功的数据、消息和状态码
        result.setData(list);
        result.setMsg("获取书籍分类成功");
        result.setStatus(200);
        return result;
    }
    /**
     * 1.获取页码和页数
     * 2.调用服务的page分页 判断是否为空
     * 3.如果不为空，存入数据，200响应状态吗，请求成功信息
     */
    @Override
    public R<Page<BookType>> getBookTypeListByPage(BasePage basePage) {

        // 获取请求的页码和页数
        int pageNum = basePage.getPageNum();
        int pageSize = basePage.getPageSize();
        Page<BookType> pageInfo = new Page<>(pageNum, pageSize);

        // 调用服务的分页查询方法
        Page<BookType> page = this.page(pageInfo);

        // 判断查询结果是否为空
        if (page.getTotal() == 0) {
            return R.error("书籍分类列表为空");
        }

        // 构造响应结果
        R<Page<BookType>> result = new R<>();
        result.setData(pageInfo); // 设置数据
        result.setMsg("获取书籍分类列表成功"); // 设置成功消息
        result.setStatus(200); // 设置响应状态码
        return result;
    }
    /**
     * 1.调用服务插入书籍类别
     * 2.判断是否成功
     * 3.成功返回响应状态码和请求信息
     */
    @Override
    public R<String> addBookType(BookType bookType) {
        // 尝试保存书籍类型到服务
        boolean save = this.save(bookType);
        if (!save) {
            // 如果保存失败，返回错误信息
            return R.error("添加书籍类别失败");
        }
        // 如果保存成功，返回成功信息
        return R.success(null,"添加书籍类型成功");
    }
    /**
     * 1.根据typeId查询
     * 2.判断是否为空 不为空返回前端
     */
    @Override
    public R<BookType> getBookTypeByTypeId(Integer typeId) {
        // 根据typeId查询书籍类型
        BookType type = this.getById(typeId);
        if (type == null) {
            // 如果查询结果为空，返回获取书籍类别失败的信息
            return R.error("获取书籍类别失败");
        }
        // 构建包含查询结果的成功响应
        R<BookType> result = new R<>();
        result.setData(type); // 设置查询到的书籍类型数据
        result.setStatus(200); // 设置响应状态码为200
        result.setMsg("获取书籍类别成功"); // 设置成功消息
        return result;
    }
    /**
     * 1.判断空参数
     * 2.更新书籍 判断是否成功
     * 3.成功->200 失败->错误信息
     */
    @Override
    public R<String> updateBookType(BookType bookType) {
        // 判断传入的书籍类型对象中类型内容和名称是否为空
        String typeContent = bookType.getTypeContent();
        String typeName = bookType.getTypeName();
        if (StringUtils.isBlank(typeContent) || StringUtils.isBlank(typeName)) {
            // 如果任一为空，则返回更新失败的信息
            return R.error("更新书籍类别失败");
        }
        // 尝试根据ID更新书籍类型信息
        boolean update = this.updateById(bookType);
        if (!update) {
            // 如果更新不成功，则返回更新失败的信息
            return R.error("更新书籍类别失败");
        }

        // 更新成功，返回成功消息
        return R.success(null,"更新书籍类别成功");
    }
    /**
     * 1.先根据typeId查询是否有此书籍类别
     * 2.调用服务，删除书籍类别，判断是否成功
     * 3.成功->200 失败->错误信息
     */
    @Transactional
    @Override
    public R<String> deleteBookTypeByTypeId(Integer typeId) {
        // 根据typeId查询书籍类别，判断是否存在
        BookType bookType = this.getById(typeId);
        if (bookType == null) {
            // 若不存在，则返回删除失败信息
            return R.error("删除书籍类别失败");
        }
        // 尝试删除书籍类别
        boolean remove = this.removeById(typeId);
        if (!remove) {
            // 删除失败，返回错误信息
            return R.error("删除书籍类别失败");
        }
        // 删除成功，返回成功信息
        return R.success(null,"删除书籍类别成功");
    }
}




